package cn.zjk.springframework.context.annotation;

import cn.hutool.core.util.ClassUtil;
import cn.zjk.springframework.beans.factory.config.BeanDefinition;
import cn.zjk.springframework.stereotype.Component;

import java.util.LinkedHashSet;
import java.util.Set;

/**
 * @description:
 * @Author zjk
 * @className: ClassPathScanningCandidateComponentProvider
 * @date: 2023/4/4 14:06
 */
public class ClassPathScanningCandidateComponentProvider {

    /**
     * 通过basePackage 解析出 classes 信息的工具方法 findCandidateComponents，
     * 通过这个方法就可以扫描到所有 @Component 注解的 Bean 对象
     * @param basePackage 一个可以通过配置的路径
     * @return
     */
    public Set<BeanDefinition> findCandidateComponents(String basePackage){
        Set<BeanDefinition> candidates = new LinkedHashSet<>();
        Set<Class<?>> classes = ClassUtil.scanPackageByAnnotation(basePackage, Component.class);
        for(Class<?> clazz:classes){
            candidates.add(new BeanDefinition(clazz));
        }
        return candidates;
    }
}
